// main.js

// Modules to control application life and create native browser window
const { app, BrowserWindow, ipcMain, startDrag, screen,globalShortcut } = require('electron')
const path = require('node:path')

const createWindow = () => {
  let mw = 400
  let mh = 300
  let faryDisplay
  let secondaryDisplay
  let displays
  let a
  let b
  displays = screen.getAllDisplays();
  faryDisplay = displays[0];
  secondaryDisplay = displays[1];
  a = faryDisplay.workArea.width - mw
  b = 0
  if (secondaryDisplay) {
    b = secondaryDisplay.workArea.width + faryDisplay.workArea.width - mw
  }

  // Create the browser window.
  const mainWindow = new BrowserWindow({
    width: 400,
    height: 300,
    frame: false, // 显示工具栏
    draggable: true, // 允许拖动
    //窗口位置
    x: secondaryDisplay ? b : a,
    y: secondaryDisplay ? secondaryDisplay.workArea.height - mh : faryDisplay.workArea.height - mh,
    //允许点击穿透
    transparent: true,
    //工具栏透明度
    opacity: 0.8,
    //隐藏菜单栏
    menuBarVisibility: 'hidden',
    menu: null,
    movable: true, // 允许移动
    alwaysOnTop: true, // 设置窗口始终在顶层
    //允许拖动
    resizable: true, // 禁止拖动
    // 窗口背景透明
    backgroundColor: '#00000000',
    webPreferences: {
      nodeIntegration: true,
      contextIsolation: false,
      preload: path.join(__dirname, 'preload.js')
    }
  })
  // mainWindow.setIgnoreMouseEvents(true, { forward: true });
  // 加载 index.html
  mainWindow.loadFile('index.html')
  ipcMain.on('change-setting', (event, data) => {
    displays = screen.getAllDisplays();
    faryDisplay = displays[0];
    secondaryDisplay = displays[1];
    a = faryDisplay.workArea.width - mw
    b = 0
    if (secondaryDisplay) {
      b = secondaryDisplay.workArea.width + faryDisplay.workArea.width - mw
    }
    // 在这里处理接收到的数据并进行相应的设置更改
    if (data == 1) {
      mainWindow.setPosition(0, 0);
    } else if (data == 2) {
      mainWindow.setPosition(secondaryDisplay ? secondaryDisplay.workArea.x + faryDisplay.workArea.width - mw : faryDisplay.workArea.width - mw, 0);
    } else if (data == 3) {
      mainWindow.setPosition(secondaryDisplay ? secondaryDisplay.workArea.x + faryDisplay.workArea.width - mw : faryDisplay.workArea.width - mw, secondaryDisplay ? secondaryDisplay.workArea.height - mh : faryDisplay.workArea.height - mh);
    } else if (data == 4) {
      mainWindow.setPosition(0, faryDisplay.workArea.height - mh);
    }
  });

  ipcMain.on('changeSize', (event, data) => {
    if (data && data.width && data.height) {
      mw = data.width;
      mh = data.height;
      // 在这里处理接收到的数据并进行相应的设置更改
      mainWindow.setSize(data.width, data.height);
    }
  });
  ipcMain.on('chuantou', (event, data) => {
      mainWindow.setIgnoreMouseEvents(data, { forward: data });
  });
  //更改透明度
  ipcMain.on('changeOpacity', (event, data) => {
    if (data) {
      mainWindow.setOpacity(data);
    }
  });


  // 打开开发工具
  // mainWindow.webContents.openDevTools()
}

// 这段程序将会在 Electron 结束初始化
// 和创建浏览器窗口的时候调用
// 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(() => {
  createWindow()

  app.on('activate', () => {
    // 在 macOS 系统内, 如果没有已开启的应用窗口
    // 点击托盘图标时通常会重新创建一个新窗口
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})

app.on('ready', () => {
  globalShortcut.register('Esc', () => {
    // 这里执行关闭应用的逻辑
    app.quit();
  });
});
// 除了 macOS 外，当所有窗口都被关闭的时候退出程序。 因此, 通常
// 对应用程序和它们的菜单栏来说应该时刻保持激活状态, 
// 直到用户使用 Cmd + Q 明确退出
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') app.quit()
})
// 在当前文件中你可以引入所有的主进程代码
// 也可以拆分成几个文件，然后用 require 导入。